StupidBeauty
Read times:896Posted at:Tue Mar 18 00:42:09 2014
- no title specified

Smack3.4.1文档翻译:花名册和在线状态,Roster and Presence

花名册 可用于跟踪其它用户的可用性(“是否在线”)。花名册 也允许妳将用户按照分组组织起来,例如“好友”和“同事”。其它 的即时通信系统将花名册称作好友列表、联系人列表等等。

可使用 Connection.getRoster() 方法来获取一个 Roster 实例。

花名册条目

花名册中的每个用户都是使用一个RosterEntry 来表示的,它由以下属性组成:

  • •. 一个XMPP地址(例如jsmith@example.com)

  • •. 妳给该用户赋予的一个名字(例如"Joe")

  • •. 该条目在花名册中所从属的分组的列表。如果该花名册条目不属于任何分组,则被称为一个“未分组条目”("unfiled entry")。

以下代码片段会输出花名册中的所有条目:

Roster roster = connection.getRoster();

Collection<RosterEntry> entries = roster.getEntries();

for (RosterEntry entry : entries) {

System.out.println(entry);

}

还有一些方法,可用于:获取单个条目;获取未分组条目的列表;或者用来获取某个或所有的花名册分组。

在线状态

花名册 中的每个条目都有与之关联的在线状态对象。 Roster.getPresence(String user) 方法 ,会返回: 代表着 该用户的在线状态的Presence 对象;或者 ,如果 该用户不在线或 妳尝未订阅该用 户的在线状态的话,则会返回 null 注意 一般情况下,存在 于花名册中的用户, 会有 相应的在线状态对象 与之绑定 ,但是,并非所有状 况下都是如此。

一个用户的在线状态可以是在线或离线。当某个用户在线时,他/她/它的在线状态里可能会包含着更详细的信息,例如他/她/它目前在做什么,是否愿意被打扰,等等。参考Presence类以了解细节。

监听花名册Roster)和在线状态(Presence)的变更

花名册类的典型用法是,显示出一个由分组和条目组成的树型视图,并且在其中显示出每个条目的当前在线状态。作为一个示例,观摩一下图片中Exodus XMPP 客户端显示的花名册信息。

在线状态信息一般都会经常性地变动,并且花名册中的条目也有可能变动或被删除。要想监听对于花名册和在线状态数据的变更的话,应当使用一个RosterListener。要想监听针对花名册的所有变更的话,该RosterListener应当在登陆到一个XMPP 服务器之前就注册好。以下代码片段,会向该Roster 注册一个RosterListener,它会将花名册中的任何在线状态信息变更都输出到标准输出流中。一个标准的客户端,应当使用类似的代码来根据当前的变更信息更新界面中的花名册。

Roster roster = con.getRoster();

roster.addRosterListener(new RosterListener() {

// 被忽略的事件 public void entriesAdded(Collection<String> addresses) {}

public void entriesDeleted(Collection<String> addresses) {}

public void entriesUpdated(Collection<String> addresses) {}

public void presenceChanged(Presence presence) {

System.out.println("Presence changed: " + presence.getFrom() + " " + presence);

}

});

向花名册中加入条目

花名册和在线状态对象采用一种基于权限的模型,必须经过用户的同意才能将他/她/它们加入到别人的花名册中。这样就保护了用户的隐私,因为,只有被许可的用户才能查看到他/她/它们的在线状态信息。因此,当妳添加一个新的花名册条目时,它会处于一种等待状态,直到对应的用户接受了妳的请求为止。

如果有另一位用户请求订阅妳的在线状态,以便将妳加入到他/她/它的花名册中去的话,妳必须接受或者拒绝该请求。Smack可采用三种不同的方式来处理在线状态订阅请求:

  • •.自动接受所有的在线状态订阅请求。

  • •.自动拒绝所有的在线状态订阅请求。

  • •.手动处理在线状态订阅请求。

具体采用哪种模式 ,可通过 Roster.setSubscriptionMode(Roster.SubscriptionMode) 方法来设置。简单 的客户一般会采用自动处理模式,而完整功能的客户端应当采用手动处理模式 ,由最终用户来决定 是接受还是拒绝每个请求。如果采用手动模式 的话,应当注册一个 PacketListener ,它需要监听类型为 Presence.Type.subscribe 的Presence 数据包。

英拉

波多野结衣

未知美人

Your opinions
Your name:Email:Website url:Opinion content:
- no title specified

HxLauncher: Launch Android applications by voice commands